Make debug flags per-display
authorMatthias Clasen <mclasen@redhat.com>
Fri, 11 Mar 2016 05:16:35 +0000 (00:16 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 11 Mar 2016 05:22:36 +0000 (00:22 -0500)
Tihs lets us toggle debug flags in the inspector without affecting
the inspector itself.

gtk/gtkmain.c
gtk/gtkprivate.h

index 9115f7ca31ffcc70480136aa2d9cf5c54c02e12d..71693ef27d41f0ceb7e2d6a5815690eccdcdacfe 100644 (file)
@@ -694,6 +694,7 @@ static void
 default_display_notify_cb (GdkDisplayManager *dm)
 {
   _gtk_accessibility_init ();
+  gtk_set_debug_flags (debug_flags);
 }
 
 static void
@@ -796,6 +797,24 @@ post_parse_hook (GOptionContext *context,
   return TRUE;
 }
 
+guint
+gtk_get_display_debug_flags (GdkDisplay *display)
+{
+  if (display)
+    return GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (display), "gtk-debug-flags"));
+  else
+    return debug_flags;
+}
+
+void
+gtk_set_display_debug_flags (GdkDisplay *display,
+                             guint       flags)
+{
+  if (display)
+    g_object_set_data (G_OBJECT (display), "gtk-debug-flags", GUINT_TO_POINTER (flags));
+  else
+    debug_flags = flags;
+}
 
 /**
  * gtk_get_debug_flags:
@@ -810,7 +829,7 @@ post_parse_hook (GOptionContext *context,
 guint
 gtk_get_debug_flags (void)
 {
-  return debug_flags;
+  return gtk_get_display_debug_flags (gdk_display_get_default ());
 }
 
 /**
@@ -821,7 +840,7 @@ gtk_get_debug_flags (void)
 void
 gtk_set_debug_flags (guint flags)
 {
-  debug_flags = flags;
+  gtk_set_display_debug_flags (gdk_display_get_default (), flags);
 }
 
 gboolean
@@ -832,7 +851,7 @@ gtk_simulate_touchscreen (void)
   if (test_touchscreen == 0)
     test_touchscreen = g_getenv ("GTK_TEST_TOUCHSCREEN") != NULL ? 1 : -1;
 
-  return test_touchscreen > 0 || (debug_flags & GTK_DEBUG_TOUCHSCREEN) != 0;
+  return test_touchscreen > 0 || (gtk_get_debug_flags () & GTK_DEBUG_TOUCHSCREEN) != 0;
  }
 
 /**
@@ -1027,7 +1046,7 @@ gtk_init_check (int    *argc,
 
   ret = GDK_PRIVATE_CALL (gdk_display_open_default) () != NULL;
 
-  if (debug_flags & GTK_DEBUG_INTERACTIVE)
+  if (gtk_get_debug_flags () & GTK_DEBUG_INTERACTIVE)
     gtk_window_set_interactive_debugging (TRUE);
 
   return ret;
index 9385b8bafd972c34b5fa77c8fc2eac3a6befb2d3..cd48558e99292ed518e4af22339935d67b565fa6 100644 (file)
@@ -97,6 +97,18 @@ void _gtk_load_dll_with_libgtk3_manifest (const char *dllname);
 
 gboolean        gtk_simulate_touchscreen (void);
 
+guint gtk_get_display_debug_flags (GdkDisplay *display);
+
+#ifdef G_ENABLE_DEBUG
+
+#define GTK_DISPLAY_DEBUG_CHECK(display,type) G_UNLIKELY (gtk_get_display_debug_flags (display) & GTK_DEBUG_##type)
+
+#else
+
+#define GTK_DISPLAY_DEBUG_CHECK(display,type) 0
+
+#endif /* G_ENABLE_DEBUG */
+
 G_END_DECLS
 
 #endif /* __GTK_PRIVATE_H__ */